<?php

abstract class HTML_Fluent_XHTML_Element_Base_BLOCKQUOTE extends HTML_Fluent_Element {

    /**
     * The name of this element
     *
     * @return string
     */
    public function getName() {
        return 'blockquote';
    }

    protected $attributes = array(
        'cite' => null,
        'class' => null,
        'dir' => null,
        'id' => null,
        'lang' => null,
        'onclick' => null,
        'ondblclick' => null,
        'onkeydown' => null,
        'onkeypress' => null,
        'onkeyup' => null,
        'onmousedown' => null,
        'onmousemove' => null,
        'onmouseout' => null,
        'onmouseover' => null,
        'onmouseup' => null,
        'style' => null,
        'title' => null,
    );

    /**
     * Add a new element 'address' as a child
     *
     * @return HTML_Fluent_XHTML_Element_ADDRESS
     */
    public function address() {
        return $this->newChildElement('address', func_get_args());
    }

    /**
     * Add a new element 'blockquote' as a child
     *
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function blockquote() {
        return $this->newChildElement('blockquote', func_get_args());
    }

    /**
     * Add a new element 'del' as a child
     *
     * @return HTML_Fluent_XHTML_Element_DEL
     */
    public function del() {
        return $this->newChildElement('del', func_get_args());
    }

    /**
     * Add a new element 'div' as a child
     *
     * @return HTML_Fluent_XHTML_Element_DIV
     */
    public function div() {
        return $this->newChildElement('div', func_get_args());
    }

    /**
     * Add a new element 'dl' as a child
     *
     * @return HTML_Fluent_XHTML_Element_DL
     */
    public function dl() {
        return $this->newChildElement('dl', func_get_args());
    }

    /**
     * Add a new element 'fieldset' as a child
     *
     * @return HTML_Fluent_XHTML_Element_FIELDSET
     */
    public function fieldset() {
        return $this->newChildElement('fieldset', func_get_args());
    }

    /**
     * Add a new element 'form' as a child
     *
     * @return HTML_Fluent_XHTML_Element_FORM
     */
    public function form() {
        return $this->newChildElement('form', func_get_args());
    }

    /**
     * Add a new element 'h1' as a child
     *
     * @return HTML_Fluent_XHTML_Element_H1
     */
    public function h1() {
        return $this->newChildElement('h1', func_get_args());
    }

    /**
     * Add a new element 'h2' as a child
     *
     * @return HTML_Fluent_XHTML_Element_H2
     */
    public function h2() {
        return $this->newChildElement('h2', func_get_args());
    }

    /**
     * Add a new element 'h3' as a child
     *
     * @return HTML_Fluent_XHTML_Element_H3
     */
    public function h3() {
        return $this->newChildElement('h3', func_get_args());
    }

    /**
     * Add a new element 'h4' as a child
     *
     * @return HTML_Fluent_XHTML_Element_H4
     */
    public function h4() {
        return $this->newChildElement('h4', func_get_args());
    }

    /**
     * Add a new element 'h5' as a child
     *
     * @return HTML_Fluent_XHTML_Element_H5
     */
    public function h5() {
        return $this->newChildElement('h5', func_get_args());
    }

    /**
     * Add a new element 'h6' as a child
     *
     * @return HTML_Fluent_XHTML_Element_H6
     */
    public function h6() {
        return $this->newChildElement('h6', func_get_args());
    }

    /**
     * Add a new element 'hr' as a child
     *
     * @return HTML_Fluent_XHTML_Element_HR
     */
    public function hr() {
        return $this->newChildElement('hr', func_get_args());
    }

    /**
     * Add a new element 'ins' as a child
     *
     * @return HTML_Fluent_XHTML_Element_INS
     */
    public function ins() {
        return $this->newChildElement('ins', func_get_args());
    }

    /**
     * Add a new element 'noscript' as a child
     *
     * @return HTML_Fluent_XHTML_Element_NOSCRIPT
     */
    public function noscript() {
        return $this->newChildElement('noscript', func_get_args());
    }

    /**
     * Add a new element 'ol' as a child
     *
     * @return HTML_Fluent_XHTML_Element_OL
     */
    public function ol() {
        return $this->newChildElement('ol', func_get_args());
    }

    /**
     * Add a new element 'p' as a child
     *
     * @return HTML_Fluent_XHTML_Element_P
     */
    public function p() {
        return $this->newChildElement('p', func_get_args());
    }

    /**
     * Add a new element 'pre' as a child
     *
     * @return HTML_Fluent_XHTML_Element_PRE
     */
    public function pre() {
        return $this->newChildElement('pre', func_get_args());
    }

    /**
     * Add a new element 'script' as a child
     *
     * @return HTML_Fluent_XHTML_Element_SCRIPT
     */
    public function script() {
        return $this->newChildElement('script', func_get_args());
    }

    /**
     * Add a new element 'table' as a child
     *
     * @return HTML_Fluent_XHTML_Element_TABLE
     */
    public function table() {
        return $this->newChildElement('table', func_get_args());
    }

    /**
     * Add a new element 'ul' as a child
     *
     * @return HTML_Fluent_XHTML_Element_UL
     */
    public function ul() {
        return $this->newChildElement('ul', func_get_args());
    }


    /**
     * Set the value of the 'cite' attribute.
     *
     * @param string|null $value
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function cite($value) {
        return $this->setAttribute('cite', $value);
    }

    /**
     * Set the value of the 'class' attribute.
     *
     * @param string|null $value
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function c($value) {
        return $this->setAttribute('class', $value);
    }

    /**
     * Add a class name to the class attribute.
     *
     * @param string $class
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function addClass($class) {
        $classes = array_unique(preg_split('/\s+/', $this->getAttribute('class'), -1, PREG_SPLIT_NO_EMPTY));
        $classes[] = $class;
        return $this->setAttribute('class', implode(' ', $classes));
    }

    /**
     * Remove a class name from the class attribute.
     *
     * @param string $class
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function removeClass($class) {
        $classes = array_unique(preg_split('/\s+/', $this->getAttribute('class'), -1, PREG_SPLIT_NO_EMPTY));
        foreach ($classes as $key => $value) {
            if ($value == $class) unset($classes[$key]);
        }
        return $this->setAttribute('class', implode(' ', $classes));
    }

    /**
     * Set the value of the 'dir' attribute.
     *
     * @param string|null $value
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function dir($value) {
        return $this->setAttribute('dir', $value);
    }

    /**
     * Set the value of the 'id' attribute.
     *
     * @param string|null $value
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function id($value) {
        return $this->setAttribute('id', $value);
    }

    /**
     * Set the value of the 'lang' attribute.
     *
     * @param string|null $value
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function lang($value) {
        return $this->setAttribute('lang', $value);
    }

    /**
     * Set the value of the 'onclick' attribute.
     *
     * @param string|null $value
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function onclick($value) {
        return $this->setAttribute('onclick', $value);
    }

    /**
     * Set the value of the 'ondblclick' attribute.
     *
     * @param string|null $value
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function ondblclick($value) {
        return $this->setAttribute('ondblclick', $value);
    }

    /**
     * Set the value of the 'onkeydown' attribute.
     *
     * @param string|null $value
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function onkeydown($value) {
        return $this->setAttribute('onkeydown', $value);
    }

    /**
     * Set the value of the 'onkeypress' attribute.
     *
     * @param string|null $value
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function onkeypress($value) {
        return $this->setAttribute('onkeypress', $value);
    }

    /**
     * Set the value of the 'onkeyup' attribute.
     *
     * @param string|null $value
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function onkeyup($value) {
        return $this->setAttribute('onkeyup', $value);
    }

    /**
     * Set the value of the 'onmousedown' attribute.
     *
     * @param string|null $value
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function onmousedown($value) {
        return $this->setAttribute('onmousedown', $value);
    }

    /**
     * Set the value of the 'onmousemove' attribute.
     *
     * @param string|null $value
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function onmousemove($value) {
        return $this->setAttribute('onmousemove', $value);
    }

    /**
     * Set the value of the 'onmouseout' attribute.
     *
     * @param string|null $value
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function onmouseout($value) {
        return $this->setAttribute('onmouseout', $value);
    }

    /**
     * Set the value of the 'onmouseover' attribute.
     *
     * @param string|null $value
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function onmouseover($value) {
        return $this->setAttribute('onmouseover', $value);
    }

    /**
     * Set the value of the 'onmouseup' attribute.
     *
     * @param string|null $value
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function onmouseup($value) {
        return $this->setAttribute('onmouseup', $value);
    }

    /**
     * Set the value of the 'style' attribute.
     *
     * @param string|null $value
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function style($value) {
        return $this->setAttribute('style', $value);
    }

    /**
     * Set the value of the 'title' attribute.
     *
     * @param string|null $value
     * @return HTML_Fluent_XHTML_Element_BLOCKQUOTE
     */
    public function title($value) {
        return $this->setAttribute('title', $value);
    }

}
